package com.atguigu.test6;

import java.util.Arrays;
import java.util.Random;

/**
 * @author 路飞
 * @date 2024/4/6 15:36
 * @description 写一个排序算法1-100随机数字，进行排序，要求效率（例如：冒泡、选择、快排.....等）
 */
public class Test8 {
    public static void main(String[] args) {
        int[] arr = getArray();
        System.out.println("原始数组顺序为：" + Arrays.toString(arr));
//        bubbleSoft(arr);
        selectedSoft(arr);
        System.out.println("排序后的数组顺序为：" + Arrays.toString(arr));
    }

    public static int[] getArray() {
        int[] arr = new int[10];
        Random random = new Random();
        for (int i = 0; i < arr.length; i++) {
            arr[i] = random.nextInt(1, 101);
        }
        return arr;
    }

    /**
     * @Description 冒泡排序
     */
    public static void bubbleSoft(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {
            for (int k = 0; k < arr.length - 1 - i; k++) {
                if (arr[k + 1] > arr[k]) {
                    int temp = arr[k + 1];
                    arr[k + 1] = arr[k];
                    arr[k] = temp;
                }
            }
        }
    }

    /**
     * @Description 选择排序
     */
    public static void selectedSoft(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {
            int index = i;
            // 遍历一轮，找到这一轮当中的最大值或者是最小值的索引 赋给index
            for (int k = i + 1; k < arr.length; k++) {
                if (arr[k] > arr[index]) {
                    index = k;
                }
            }
            // 然后每一轮，让当前位置的元素，和找到的最大值或者最小值交换位置
            // 一轮轮遍历之后，元素的顺序就已经排列好了
            if (i != index) {
                int temp = arr[i];
                arr[i] = arr[index];
                arr[index] = temp;
            }
        }
    }
}
